]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
weather: Take global location switch into account
authorFlorian Müllner <fmuellner@gnome.org>
Sun, 19 Mar 2017 13:31:19 +0000 (14:31 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 20 Mar 2017 18:02:08 +0000 (19:02 +0100)
The setting to globally disable location settings altogether isn't
handled by the geoclue service itself, but by the authorization
agent. This means that:

 - it doesn't apply to system components
   (which gnome-shell is now considered[0])
 - it doesn't apply once the geoclue connection
   has been authorized

However users can reasonably expect that we won't use location services
after they disabled them, so handle the setting explicitly.

[0] https://cgit.freedesktop.org/geoclue/commit/?id=a4cef6c0ad08

https://bugzilla.gnome.org/show_bug.cgi?id=780252

js/misc/weather.js

index 04e3295dc928ea39f67caeede6a52b6405944ecf..31ca1926119561213af690b8dd5f88abdf89ccb3 100644 (file)
@@ -28,6 +28,10 @@ const WeatherClient = new Lang.Class({
         this._gclueStarting = false;
         this._gclueLocationChangedId = 0;
 
+        this._locationSettings = new Gio.Settings({ schema_id: 'org.gnome.system.location' });
+        this._locationSettings.connect('changed::enabled',
+                                       Lang.bind(this, this._updateAutoLocation));
+
         this._world = GWeather.Location.get_world();
 
         let providers = GWeather.Provider.METAR |
@@ -82,7 +86,8 @@ const WeatherClient = new Lang.Class({
     },
 
     get _useAutoLocation() {
-        return this._autoLocationRequested;
+        return this._autoLocationRequested &&
+               this._locationSettings.get_boolean('enabled');
     },
 
     _loadInfo: function() {
@@ -174,6 +179,10 @@ const WeatherClient = new Lang.Class({
 
         this._autoLocationRequested = useAutoLocation;
 
+        this._updateAutoLocation();
+    },
+
+    _updateAutoLocation: function() {
         this._updateLocationMonitoring();
 
         if (this._useAutoLocation)